define(function(require, exports) {
	var util = require('util');
	var pubjs = require('pubjs');
	var echarts = require('@base/echarts');

	// 环形图, 只突出显示某一项数据,用于dashboard的顶部人群汇总展示
	// 与其它chart不同的是后端需要返回一个对象，包含value和total字段即可
	var DountSingle = echarts.pie.extend({
		init: function(config) {
			config = pubjs.conf(config, {
				// 主题颜色
				// 分别为：环形高亮颜色、环形底色、label文字颜色、数值颜色
				color: ['#3EC7EE', '#EAEAF1', '#9C9C9C', '#666666'],
				// label文字
				label: '',
				// 字段配置
				field: {
					total: 'total',
					value: 'value'
				},
				build: {
					// 关闭拖拽重计算，去除饼图外的边框线
					calculable: false,
					// 不显示工具箱
					toolbox: {
						show: false
					},
					legend: {
						show: false
					},
					series: {
						selectedMode: false,
						radius: ['65%', '75%'],
						itemStyle: {
							normal : {
								label : {
									show: true,
									textStyle: {
										baseline : 'top'
									}
								},
								labelLine : {
									show : false
								}
							},
							emphasis: {
								color: 'rgba(0,0,0,0)'
							}
						}
					}
				}
			});

			this.Super('init', arguments);
		},
		// 默认认为第一项为突出显示的数据
		setData: function(data) {
			var c = this.getConfig();
			var total = data[c.field.total];
			var current = data[c.field.value];

			this.Super('setData', [
				[
					{name: c.label, value: current, itemStyle: {
						normal : {
							color: c.color[0],
							label : {
								position : 'center',
								formatter : '{b}',
								textStyle: {
									baseline : 'bottom',
									fontSize: 25,
									color: c.color[2]
								}
							}
						}
					}},
					{name: 'other', value: total - current, itemStyle: {
						normal : {
							color: c.color[1],
							label : {
								position : 'center',
								formatter : function (params){
									return util.numberFormat(current, ',', 3);
								},
								textStyle: {
									color: c.color[3],
									fontSize: 32
								}
							}
						}
					}}
				]
			]);

			return this;
		}
	});
	exports.dountSingle = DountSingle;

	// 环形图, 突出显示两项数据, 用于dashboard的性别图例
	var DountDouble = echarts.pie.extend({
		init: function(config) {
			config = pubjs.conf(config, {
				name: 'name',
				value: 'value',
				// 依次为 指标1环颜色、指标2环颜色、文字颜色
				color: ['#3EC7EE', '#F7659F', '#9C9C9C'],
				build: {
					// 关闭拖拽重计算，去除饼图外的边框线
					calculable: false,
					// 不显示工具箱
					toolbox: {
						show: false
					},
					legend: {
						show: true,
						orient: 'horizontal',
						x : 'left',
						y: 'top',
						selectedMode: false
					},
					series: {
						minAngle: 5,
						radius: ['55%', '65%'],
						itemStyle: {
							normal : {
								label : {
									show: true,
									position : 'center',
									textStyle: {
										baseline : 'top',
										fontSize: 22
									},
									formatter : '{b} : {d}%'
								},
								labelLine : {
									show : false
								}
							},
							emphasis: {
								color: 'rgba(0,0,0,0)'
							}
						}
					}
				}
			});

			this.Super('init', arguments);
		},
		setData: function(data) {
			data = data.items;
			if (data && data.length) {
				var c = this.getConfig();
				// 倒叙排列
				data = data.sort(function(a, b) {
					return b[c.value] - a[c.value];
				});

				var first = data[0] || {};
				var firstValue = first[c.value];
				var second = data[1] || {};
				var secondValue = second[c.value];

				this.Super('setData', [
					[
						{name: first[c.name] || '', value: firstValue, itemStyle: {
							normal : {
								color: c.color[0],
								label : {
									textStyle: {
										baseline : 'bottom',
										color: c.color[2]
									}
								}
							}
						}},
						{name: second[c.name], value: secondValue, itemStyle: {
							normal : {
								color: c.color[1],
								label : {
									textStyle: {
										baseline : 'top',
										color: c.color[2]
									}
								}
							}
						}}
					]
				]);
			}

			return this;
		}
	});
	exports.dountDouble = DountDouble;

	// 南丁格尔玫瑰图
	var Rose = echarts.rose.extend({
		init: function(config) {
			config = pubjs.conf(config, {
				theme: 'macarons',
				xField: {
					field: 'name',
					format: function(text) {
						return text.replace(/.{6}/g, '$&\n');
					}
				},
				build: {
					toolbox: {
						show: false
					},
					legend: {
						show: false
					},
					series: {
						minAngle: 5,
						selectedMode: 'single',
						startAngle: 120,
						clockWise: false,
						radius: ['30%', '60%']
					}
				}
			});
			this.Super('init', arguments);
		}
	});
	exports.rose = Rose;
});